extensions: add fastpath for R'G'B'A u8 to cairo-ARGB32 conversion
authorAlexia Death <alexiadeath@gmail.com>
Fri, 27 Jul 2012 18:49:35 +0000 (21:49 +0300)
committerAlexia Death <alexiadeath@gmail.com>
Mon, 30 Jul 2012 20:06:56 +0000 (23:06 +0300)
extensions/cairo.c

index abc87fdc7a47f1ac000fad2f22ec5358504a8ee0..2e224d0cf5996cf2539d78fa1dbff040f8ac0a85 100644 (file)
@@ -55,6 +55,22 @@ conv_rgb8_cairo24_le (unsigned char *src, unsigned char *dst, long samples)
 
 static inline long
 conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+{
+  long n = samples;
+  while (n--)
+    {
+      dst[0] = src[2] * src[3];
+      dst[1] = src[1] * src[3];
+      dst[2] = src[0] * src[3];
+      dst[3] = src[3];
+      src+=4;
+      dst+=4;
+    }
+  return samples;
+}
+
+static inline long
+conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   while (n--)
@@ -101,7 +117,10 @@ init (void)
       );
 
       babl_conversion_new (babl_format ("R'aG'aB'aA u8"), f32, "linear", 
+                           conv_rgbA8_premul_cairo32_le, NULL);
+      babl_conversion_new (babl_format ("R'G'B'A u8"), f32, "linear",
                            conv_rgbA8_cairo32_le, NULL);
+
       babl_conversion_new (babl_format ("R'G'B'A u8"), f24, "linear", 
                            conv_rgba8_cairo24_le, NULL);
       babl_conversion_new (babl_format ("R'G'B' u8"), f24, "linear",